package org.danan.spark2hudi.utils;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: NanHuang
 * @Date: 2023/04/18/11:01
 * @Description:
 */
public class JDBCUtil {
    private static DruidDataSource dorisSource;
    static {
        // MySQL-配置表
        // 创建连接池
        dorisSource = new DruidDataSource();
        // 设置驱动全类名
        dorisSource.setDriverClassName("com.mysql.jdbc.Driver");
        // 设置连接 url
        dorisSource.setUrl("jdbc:mysql://10.175.245.57:9030/dwd");
        // 设置用户名
        dorisSource.setUsername("root");
        // 设置密码
        dorisSource.setPassword("");
        // 设置初始化连接池时池中连接的数量
        dorisSource.setInitialSize(5);
        // 设置同时活跃的最大连接数
        dorisSource.setMaxActive(100);
        // 设置空闲时的最小连接数，必须介于 0 和最大连接数之间，默认为 0
        dorisSource.setMinIdle(10);
        // 设置没有空余连接时的等待时间，超时抛出异常，-1 表示一直等待
        dorisSource.setMaxWait(-1);
        // 指明连接是否被空闲连接回收器（如果有）进行检验，如果检测失败，则连接将被从池中去除
        // 注意，默认值为 true，如果没有设置 validationQuery，则报错
        // testWhileIdle is true, validationQuery not set
        dorisSource.setTestWhileIdle(true);
        // 借出连接时，是否测试，设置为 true，不测试可能连接无法使用
        dorisSource.setTestOnBorrow(true);
        // 归还连接时，是否测试
        dorisSource.setTestOnReturn(false);
        // 设置空闲连接回收器每隔 30s 运行一次
        dorisSource.setTimeBetweenEvictionRunsMillis(30 * 1000L);
        // 设置池中连接空闲 30min 被回收，默认值即为 30 min
        dorisSource.setMaxEvictableIdleTimeMillis(30 * 60 * 1000L);
    }
    public static Connection getDorisConnection() throws SQLException {
        return dorisSource.getConnection();
    }
}
